package main

import (
	"sync"
	//"time"
)

const N = 10

var wg = &sync.WaitGroup{}

var mu = &sync.Mutex{}

func main() {
	for i := 0; i < N; i++ {
		wg.Add(1) // 在 Goroutine 启动前增加计数器
		go func(i int) {
			defer wg.Done()
			mu.Lock()
			println(i)
			mu.Unlock()
		}(i)
	}
	wg.Wait()
}

//打印的结果不是唯一的原因是因为 Goroutine 的执行顺序是非确定性的。每次运行程序时，操作系统调度器可能会以不同的顺序调度这些 Goroutine。由于 Goroutine 的执行是并发的，它们的启动和完成顺序是随机的，因此打印的结果顺序也会变化。
//
//在你的代码中，每个 Goroutine 都打印了 i 的值，但因为所有的 Goroutine 是并发执行的，它们打印的顺序并没有严格的控制。因此，你可能会看到不同的打印顺序。例如，有时可能会看到 0 1 2 3 ... 9，而有时则可能会看到 9 8 7 ... 0 或其他任意顺序的混合。
